const { OPERATION_IS_NOT_ALLOWED, RESOURCE_IS_NOT_EXISTS } = require("../config/error");
const { checkResouce, searchResource } = require("../service/permission.service");

// const verifyMomentPermission = async (ctx, next) => {
//   // 1.获取登入用户的id/修改动态的momentId(确定删除那一条动态)
//   const { momentId } = ctx.params
//   const { id } = ctx.user

//   // 2.查询user的id是否有修改momentId的权限
//   const isPermission = await checkMoment(momentId, id)

//   if (!isPermission) {
//     return ctx.app.emit('error',OPERATION_IS_NOT_ALLOWED, ctx )
//   }
//   // 3.执行下一个中间件
//   await next()
// }

const verifyPermission = async (ctx, next) => {
  // 1.获取登入用户的id/修改动态的momentId等(确定删除那一条动态)
  const { id } = ctx.user;

  // 2.获取资源的name/id    ctx.params = {momentId: '3'}
  const keyName = Object.keys(ctx.params)[0]; // keyName => momentId
  const resourceId = ctx.params[keyName]; // 对应resourceId => 3  id
  const resourceName = keyName.replace("Id", ""); // resourceName => moment 表名
  // 3.是否存在该资源
  const isExist = await searchResource(resourceName, resourceId, id);
  if (!isExist) {
    return ctx.app.emit("error", RESOURCE_IS_NOT_EXISTS, ctx);
  }
  // 4.查询user的id是否有修改momentId的权限
  const isPermission = await checkResouce(resourceName, resourceId, id);

  if (!isPermission) {
    return ctx.app.emit("error", OPERATION_IS_NOT_ALLOWED, ctx);
  }
  // 3.执行下一个中间件
  await next();
};

module.exports = {
  verifyPermission,
};
